package com.duoduo.mall.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.Map;

public class JwtUtils {

    private static String signKey = "dianshang";//实际开发中，要使用复杂的密钥
    private static Long expire = 43200000L;// 12*3600*1000 --- 12个小时

    /**
     * 生成JWT令牌
     * 
     * @param claims JWT第二部分负载 payload 中存储的内容
     * @return
     */
    public static String generateJwt(Map<String, Object> claims) {
        String jwt = Jwts.builder()// 开始构建JWT的过程
                .addClaims(claims)// 自定义内容（载荷）
                .signWith(SignatureAlgorithm.HS256, signKey)// 设置签名算法和密钥
                .setExpiration(new Date(System.currentTimeMillis() + expire))// 设置有效期
                .compact();// 最终生成jwt令牌
        return jwt;
    }

    /**
     * 解析JWT令牌
     * 
     * @param jwt JWT令牌
     * @return JWT第二部分负载 payload 中存储的内容
     */
    public static Claims parseJWT(String jwt) {
        // 解析时会自动判断是否过期
        Claims claims = Jwts.parser()
                .setSigningKey(signKey)
                .parseClaimsJws(jwt)
                .getBody();
        return claims;
    }

    public static int getUserId(String token) {
        try {
            Claims claims = JwtUtils.parseJWT(token);// 获得map集合
            return claims.get("userId", Integer.class);

        } catch (Exception e) {
            return 0;
        }

    }

}
